/**
 * 问题: 
 * 手写一个add方法支持链式调用，调用output方法输出结果
 * 
 * 描述:
 * add(1,2).add(3).add(4).output() // 输出10
*/

function add(...initArgs) {
  function Add(...args) {
    this.sum = args.reduce((acc, num) => acc + num, 0)
  }
  // 第二次以后调用add返回this, 每次调用add更新sum
  Add.prototype.add = function(...params) {
    this.sum = params.reduce((acc, cur) => acc + cur, this.sum)
    return this
  }
  // 调用output输出this.sum
  Add.prototype.output = function() {
    return this.sum
  }
  // 第一次调用add初始化实例，维护sum
  return new Add(...initArgs)
}

let res = add(1,2).add(3).add(4).output()
console.log(res) // 10
